<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // let 关键字就是用来声明变量的 // 使用let关键字声明的变量具有块级作用域
        // 在一个大括号中 使用let关键字声明的变量才具有块级作用域
        // 使用let关键字声明的变量具有块级作用域   var关键字是不具备这个特点的
        // 使用let声明循环变量 防止循环变量变成全局变量
        // 使用let关键字声明的变量 没有变量提升
        // 使用let关键字声明的变量具有暂时性死区特性

        // 1.在一个大括号中 使用let关键字声明的变量才具有块级作用域
        // if (true) {
        //     let a = 10
        //     console.log(a);//10
        //     if (true) {
        //         let b = 20
        //     }
        //     console.log(b);//defined
        // }
        // console.log(a);//defined
        // console.log('-------------------');

        // 2.使用let关键字声明的变量具有块级作用域   var关键字是不具备这个特点的
        // if (true) {
        //     let num = 100
        //     var abc = 200
        // }
        // console.log(abc);//200
        // console.log(num);//defined

        // 3.使用let声明循环变量 防止循环变量变成全局变量
        // for (let i = 0; i < 2; i++) {
        //     console.log(i);//2
        // }
        // console.log(i);//defined

        // 4.使用let关键字声明的变量 没有变量提升
        // console.log(a);//报错 
        // let a = 10
        // 5.使用let关键字声明的变量具有暂时性死区特性
        var num = 10
        if (true) {
            console.log(num);//报错未定义 没有let没有变量提升  let声明的num已和if块级作用域绑定 跟外部var声明的num是没有关系的
            let num = 20
        }
        
    </script>
</body>

</html>